<?php
require_once("LoginView.php");
require_once("Database.php");


class LoginHandler {
		
	private $status = "LoginHandler::LoggedIn";
	private $username;
	private $password;
	private $m_db = NULL;
	const USERSESSION = "loggedinas";
	
	public function __construct(Database $db){
		$this->m_db = $db;
	}
	
	// Funktion för att se om en användare är inloggad,
	// returnerar true om användaren är inloggad - annars false 
	public function IsLoggedIn(){
		if(isset($_SESSION[$this->status]) && $_SESSION[$this->status] == TRUE){
			return TRUE;
		}
		else {
			return FALSE;
		}
		
	}

	
	// Funktion för att logga in en användare,
	// returnerar true och sätter sessionen till true om inloggningen lyckades - annars returneras false
	public function DoLogin($user, $pass){
		$this->username = $user;
		$this->password = sha1($pass);

			if($this->m_db->SelectUser($this->username, $this->password) > 0){
				$_SESSION[$this->status] = TRUE;
				$_SESSION[self::USERSESSION] = $this->username;

				return TRUE;
			}
			else {
				return FALSE;
			}
		
	}
	
	// Funktion för att logga ut
	// Ser även om cookies är satta och tar bort dessa
	//Sätter sessionen "LoggedIn" till false
	public function DoLogout(){
		if(isset($_SESSION[$this->status])){
			unset($_SESSION[self::USERSESSION]);
			unset($_SESSION[$this->status]);
		}
	}
	// Testar klassen LoginHandler
	// går igenom olika test för funktionerna i klassen
	// returnerar false om något test inte fungerar, annars returneras true

	public function Test(){
		
		$loginview = new LoginView();
		
		$this->DoLogout();
		// Testar IsLoggedIn
		// returnerar false ifall IsLoggedIn inte fungerar
		if($this->IsLoggedIn()){
			echo $loginview->Messages(LoginView::ISLOGGEDIN_NOT_WORK);
			return false;
		}
		// Testar DoLogin
		// returnerar false ifall DoLogin inte fungerar
		if($this->DoLogin("Patrik", "Stjärna")){
			echo $loginview->Messages(LoginView::DOLOGIN_NOT_WORK);
			return false;
		}
		// Testar DoLogin igen
		// returnerar false ifall det går att logga in med okrypterat lösen
		if($this->DoLogin("Derpy", "Hooves")){
			echo $loginview->Messages(LoginView::DOLOGIN_NOT_WORK);
			return false;
		}

		// Testar DoLogout
		$this->DoLogout();
		
		//Testar DoLogin med rätt användarnamn och fel lösenord
		//Returnerar false om det fungerar
		if($this->DoLogin("Derpy", "Face")){
			echo $loginview->Messages(LoginView::DOLOGIN_NOT_WORK);
			return false;
		}
		
		if(!$this->DoLogin("Lyra", "Heartstrings"))
		{
			return false;
		}
		return true;
		
	}
}
?>